package cn.yeziji.forum.common.key;

import cn.yeziji.forum.common.key.generate.UserCacheKeyGenerate;

/**
 * 用户缓存键值
 *
 * @author gzkemays
 * @since 2022/3/23 10:41
 */
public interface UserCacheKey {
  String COMMON_USER_PREFIX = "ForumUser";

  /** 用户 token 缓存 */
  String USER_TOKEN_CACHE = COMMON_USER_PREFIX + "::UserToken::";
  /** 用户二级校验 token 缓存，用于跨服务校验同步数据 */
  String SECONDARY_TOKEN_CACHE = COMMON_USER_PREFIX + "::UserToken::Secondary::";
  /** 统计用户人数 */
  String USER_COUNT = COMMON_USER_PREFIX + "::Statics";
  /** 其他用户获取用户信息 */
  String USER_ENTITY_BY_OTHER_USERID_CACHE = COMMON_USER_PREFIX + "::ByOtherUser::";
  /** 根据 nickname 获取用户信息 */
  String USER_ENTITY_BY_NICKNAME_CACHE = COMMON_USER_PREFIX + "::ByNickName::";

  /** 根据 username 获取用户信息 */
  String USER_ENTITY_BY_USERNAME_CACHE = COMMON_USER_PREFIX + "::ByUserName::";

  /** 用户信息根据 UserId 获取 */
  String USER_ENTITY_BY_ID_CACHE = COMMON_USER_PREFIX + "::ByUserId::";
  /** 用户粉丝列表缓存 */
  String USER_FANS_CACHE = COMMON_USER_PREFIX + "::UserFans::";
  /** 用户关注列表缓存 */
  String USER_FOCUS_CACHE = COMMON_USER_PREFIX + "::UserFocus::";
  /** 获取用户关注以及粉丝列表 */
  String USER_FANS_AND_FOCUS_CACHE = COMMON_USER_PREFIX + "::UserFansAndFocus::";
  /** 用户更新锁缓存 */
  String USER_UPDATE_LOCK = COMMON_USER_PREFIX + "::UserLock::";

  UserCacheKeyGenerate GENERATE = new UserCacheKeyGenerate();

  /**
   * 获取刷新 token 的 cache key
   *
   * @param key 键值
   * @return 刷新 token 的 key 值
   */
  String getRefreshTokenKey(String key);
  /**
   * 获取 token 的 cache key
   *
   * @param token token 值
   * @return token 的 key 值
   */
  String getTokenCacheKey(String token);

  /**
   * 生成次要 token key
   *
   * @param username 用户名
   * @return 次要 token 的 key 值
   */
  String getSecondaryTokenKey(String username);
}
